// 参数x = x形成一个单独作用域。实际执行的是let x = x，
//由于暂时性死区的原因，这行代码会报错。
var x = 1;

function foo(x = x) {
  // ...
}

foo() // ReferenceError: Cannot access 'x' before initialization

//如果参数的默认值是一个函数，该函数的作用域也遵守这个规则
let foo = 'outer';

function bar(func = () => foo) {
  let foo = 'inner';
  console.log(func());
}

bar(); // outer